[Coding009] DataStructure

(单)链表的基本操作及图形化解释(手绘)

Ben 2023/07/29

More coding records

Get the knowledge flowing and circulating! :)

目录

标题:(单)链表的基本操作

Demo | 整体代码展示(可直接运行)

→ 分模块代码解释 - 头部

还记得[Coding004]吗?typedef v.s #define

001

→ 分模块代码解释 - 单链表结点类型

学习的方法之一:类别。把不熟悉的类比到熟悉的知识上。(如果有错误,欢迎指正哦~ :P)

002

→ 分模块代码解释 - 单链表的初始化

注意谁是指针(LinkList),谁不是指针(ListNode).

003

→ 分模块代码解释 - 单链表求长度

什么是空的链表?

  • 就是不含有实际意义值的链表:只有一个dummy结点的链表,后面没有链上任何东西!

004

→ 分模块代码解释 - 单链表判空

空链表!只有dummy伪结点的链表。

005

→ 分模块代码解释 - 单链表插入操作:在第i个元素前插入

在链表中插入/删除一个元素的重要前提:先找到待操作的元素的前一个位置,不然链表会断掉!

006

→ 分模块代码解释 - 单链表取第i个元素

如果搞不清下标怎么操作的,就自己举个demo,画一画!

007

→ 分模块代码解释 - 单链表元素遍历

链表的经典移动操作:p = p->next;

008

→ 分模块代码解释 - 查找元素e的位置

切记:p是指针。可以理解为一个值,也可以理解为一个块。这里用橙色方框表示,是不是看起来更清晰了!

009

→ 分模块代码解释 - 单链表删除指定位置上的元素

在链表中插入/删除一个元素的重要前提:先找到待操作的元素的前一个位置,不然链表会断掉!

010

→ 分模块代码解释 - 单链表的清空

→ 分模块代码解释 - 单链表的销毁

概念明晰:

  • 清空:保留头部的dummy伪结点;

  • 销毁:全部都free掉!

011

→ 分模块代码解释 - 一个关于元素插入的实例:在有序单链表中插入元素

重点操作:找到前一个元素!

012

 

重点强调

这里我整理学习的是C语言版的单链表实现。当然还有复杂的链表,比如双向链表。后面不一定会整理,但是这个单链表一定是重中之重!

  • 重中之重的重中之重:在编程的过程要有意识地注意找到待操作元素的前一个元素的位置

  • 后面会遇到复杂的代码操作,可能会有很多指针,p, q, r, s...等等。要注意辨析每个指针的作用!